package person;

import java.io.Serializable;

import person.spezial.Fachkenntnisse;
import telefonnummer.Telefonnummer;

public class Mitarbeiter implements Serializable, Comparable<Mitarbeiter>, Cloneable {
	/**
	 * 
	 */
	private static final long serialVersionUID = 2165628403136273438L;
	private long personalnummer;
	private String name;
	private String vorname;
	private Telefonnummer telefonnummer;
	private String sitz;
	private String gebaeude;
	private Fachkenntnisse fach;
	private Mitarbeiter reportsTo;
	private String eMail;
	private String aufgabe;
	private long istInProjekt = 0;
	
	public Mitarbeiter(long personalnummer, String name, String vorname,
			Telefonnummer telefonnummer, String sitz, String gebaeude,
			Fachkenntnisse fach, Mitarbeiter reportsTo, String eMail, String aufgabe, long istInProjekt) {
		super();
		this.personalnummer = personalnummer;
		this.name = name;
		this.vorname = vorname;
		this.telefonnummer = telefonnummer;
		this.sitz = sitz;
		this.gebaeude = gebaeude;
		this.fach = fach;
		this.reportsTo = reportsTo;
		this.eMail= eMail;
		this.aufgabe= aufgabe;
		this.istInProjekt = istInProjekt;
	}

	public String getAufgabe() {
		return aufgabe;
	}

	public void setAufgabe(String aufgabe) {
		this.aufgabe = aufgabe;
	}

	public String geteMail() {
		return eMail;
	}

	public void seteMail(String eMail) {
		this.eMail = eMail;
	}

	public Telefonnummer getTelefonnummer() {
		return telefonnummer;
	}

	public void setTelefonnummer(Telefonnummer telefonnummer) {
		this.telefonnummer = telefonnummer;
	}

	public String getSitz() {
		return sitz;
	}

	public void setSitz(String sitz) {
		this.sitz = sitz;
	}

	public String getGebaeude() {
		return gebaeude;
	}

	public void setGebaeude(String gebaeude) {
		this.gebaeude = gebaeude;
	}

	public Fachkenntnisse getFach() {
		return fach;
	}

	public void setFach(Fachkenntnisse fach) {
		this.fach = fach;
	}

	public Mitarbeiter getReportsTo() {
		return reportsTo;
	}

	public void setReportsTo(Mitarbeiter reportsTo) {
		this.reportsTo = reportsTo;
	}

	public long getPersonalnummer() {
		return personalnummer;
	}

	public void setPersonalnummer(long personalnummer) {
		this.personalnummer = personalnummer;
	}

	public String getName() {
		return name;
	}

	public void setName(String name) {
		this.name = name;
	}

	public String getVorname() {
		return vorname;
	}

	public void setVorname(String vorname) {
		this.vorname = vorname;
	}
	
	public long getIstInProjekt(){
		return istInProjekt;
	}
	
	public void setIstInProjekt(long anzahl){
		this.istInProjekt = anzahl;
	}
	
	public void incrIstInProjekt(){
		this.istInProjekt++;
	}
	
	public void decrIstInProjekt(){
		this.istInProjekt--;
	}

	public String toString() {

		String s = new String();
		s = "Name: " + this.name + "\nVorname: " + this.vorname
				+ "\nPersonalnummer: " + this.personalnummer;
		Object o = this.reportsTo;
		if (o != null) {
			s += "\nVorgesetzter: " + this.reportsTo.getPersonalnummer();
		}

		s += "\n Telefonnummer: " + this.telefonnummer.toString() + "\n Sitz: "
				+ this.sitz + "/n Gebaeude: " + this.gebaeude
				+ "\n Fachkenntnisse; " + this.fach.toString() + "\n EMail Adresse: "+ this.eMail + "Aufgabe: "+ this.aufgabe +"\n \n";
		return s;
	}

	public boolean equals(Mitarbeiter mi) {
		if (this.personalnummer == mi.personalnummer) {
			return true;
		} else {
			return false;
		}
	}

	@Override
	public int compareTo(Mitarbeiter mi) {
		if(this.getName().compareTo(mi.getName()) == 0){
			return this.getVorname().compareTo(mi.getVorname());
		}
		else{
			return this.getName().compareTo(mi.getName());
		}
		
	}
	
	public Mitarbeiter clone()
	  {
	    try
	    {
	      return (Mitarbeiter) super.clone();
	    }
	    catch ( CloneNotSupportedException e ) {
	      // Kann eigentlich nicht passieren, da Cloneable
	      throw new InternalError();
	    }
	  }


}
